package br.com.thor.persistencia.datastore.entidades;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import br.com.thor.biblioteca.mensageria.dados.CondicaoInfo;
import br.com.thor.biblioteca.mensageria.dados.CondicaoTipoEnum;
import br.com.thor.biblioteca.persistencia.EntidadeDb;
import br.com.thor.biblioteca.persistencia.IEntidadeDbLib;
import br.com.thor.biblioteca.persistencia.mensagens.ConsultarObjetoRequest;
import br.com.thor.biblioteca.persistencia.mensagens.ConsultarObjetoResponse;
import br.com.thor.biblioteca.persistencia.mensagens.ReceberObjetoRequest;
import br.com.thor.biblioteca.persistencia.mensagens.ReceberObjetoResponse;
import br.com.thor.biblioteca.persistencia.mensagens.RemoverObjetoRequest;
import br.com.thor.biblioteca.persistencia.mensagens.RemoverObjetoResponse;
import br.com.thor.biblioteca.persistencia.mensagens.SalvarObjetoRequest;
import br.com.thor.biblioteca.persistencia.mensagens.SalvarObjetoResponse;
import br.com.thor.persistencia.datastore.DBLibHelper;
import br.com.thor.principal.dados.UsuarioInfo;

public class UsuarioDbLib extends EntidadeDb implements IEntidadeDbLib<UsuarioInfo>{

	@SuppressWarnings("serial")
	public ConsultarObjetoResponse<UsuarioInfo> consultarObjeto(ConsultarObjetoRequest<UsuarioInfo> parametros) {
		
		// Monta os parâmetros
		Map<String, Object> params = new HashMap<String, Object>();
		String filtro = "";
		if (parametros.condicoes != null){
			for (CondicaoInfo condicao : parametros.condicoes) {
				if (condicao.propriedade ==  "nome" && condicao.tipoCondicao == CondicaoTipoEnum.Igual){
					// Adiciona o nome do atribulo da entidade e o valor da condição
					params.put("nome", condicao.valores[0]);
					filtro += "nome" + "==" + "'" +  condicao.valores[0] + "'" + " && ";
				}
			}
			
			if (filtro != "")
				filtro = filtro.substring(0, filtro.length() - 4);
		}		
		
		List<UsuarioInfo> resultado = DBLibHelper.consultar(UsuarioInfo.class, filtro);		
		return new ConsultarObjetoResponse<UsuarioInfo>(resultado);
	}

	public ReceberObjetoResponse<UsuarioInfo> receberObjeto(ReceberObjetoRequest<UsuarioInfo> parametros) {
		ReceberObjetoResponse<UsuarioInfo> res = new ReceberObjetoResponse<UsuarioInfo>();		
		res.setObjeto(DBLibHelper.receber(UsuarioInfo.class, parametros.getCodigoObjeto()));
		return res;
	}

	public SalvarObjetoResponse<UsuarioInfo> salvarObjeto(SalvarObjetoRequest<UsuarioInfo> parametros) {		
		SalvarObjetoResponse<UsuarioInfo> res = new SalvarObjetoResponse<UsuarioInfo>();
		res.setObjeto(DBLibHelper.salvar(parametros.getObjeto()));		
		return res;	
	}

	public RemoverObjetoResponse<UsuarioInfo> removerObjeto(RemoverObjetoRequest<UsuarioInfo> parametros) {	
		DBLibHelper.remover(UsuarioInfo.class, parametros.getCodigoObjeto());
		return new RemoverObjetoResponse();
	}

}
